package cc.aiee.zalopay.model;

import java.util.List;
import java.util.Map;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import cc.aiee.zalopay.core.pojo.dto.ZalopayEmbedData;
import lombok.Data;

@Data
public class ZalopayCreateOrderModel {

	/**
	 * 向ZaloPay注册应用程序时发布的应用程序的标识。
	 */
	@NotNull
	private String app_id;

	/**
	 * 应用程序用户的标识信息：ID /用户名/名称/电话号码/电子邮件。如果无法识别用户，则可以使用默认信息，例如应用程序名称
	 */
	@NotBlank
	private String app_user;

	/**
	 * 订单的交易代码。必须在当前日期的yymmdd之前。交易代码的格式应为<b>yymmddOrder</b>标识符<br>
	 * 注意： yymmdd 是正确的越南时区（GMT + 7）（因为交叉检查交易是在越南时间和日期进行的）<br>
	 * 示例: 2001148007242
	 */
	@NotBlank
	private String app_trans_id;

	/**
	 * 创建订单的时间（以毫秒为单位），距付款时间不得超过15分钟 <br>
	 * 示例值: 1459823610957
	 */
	@NotNull
	private Long app_time;

	/**
	 * 订单金额（VND）
	 */
	@NotNull
	private Long amount;

	/**
	 * 订单类型：商品，运输，酒店，食品，通票，账单。默认值为GOODS
	 */
	private String order_type;

	/**
	 * 订单的可选标题。
	 */
	private String title;

	/**
	 * 订单说明，用于在ZaloPay应用上显示给用户
	 */
	@NotBlank
	private String description;

	/**
	 * 付款完成后，Zalopay将通知订单的付款状态；如果付款失败或成功，则会触发回调。如果未提供，则将使用默认的应用程序回调URL。
	 */
	private String callback_url;

	/**
	 * JSON字符串描述设备规范。
	 */
	private String device_info;// Json数据

	/**
	 * 订单项目，由应用程序本身定义
	 */
	@NotBlank
	private List<Map<String,Object>> items;

	/**
	 * 应用程序自身的数据。付款成功后，这将返回给AppServer（Callback）。如果不是，则留空字符串
	 */
	@NotBlank
	private ZalopayEmbedData embedData;

	/**
	 * <b>必填</b> <br>
	 * 订单的身份验证信息
	 */
	private String mac;

	/**
	 * 订单货币。默认值为VND。
	 */
	private String currency;

	/**
	 * 银行代码 <br>
	 * 示例值:VTB
	 */
	private String bank_code;
	/**
	 * 用户信息 手机号
	 */
	private String phone;
	/**
	 * 用户的电子邮件
	 */
	private String email;
	/**
	 * 用户地址
	 */
	private String address;
	/**
	 * 合作伙伴已在ZaloPay注册的服务/服务组的标识（仅适用于特殊合作伙伴）
	 */
	private String sub_app_id;

}
